﻿////////////////////////////////////////////////////////////////////////////////////////
///////////场景模拟：软谋教育中，课程进行了三次优化， ///////////////////////////////////////
///////////每次优化后，学员得到的视频种类不一致   ///////////////////////////////////////
///////////而且学员固定有两种类型：免费学员和vip学员///////////////////////////////////////
///////////////////访问者模式是一种：倾斜的可扩展性设计/////////////////////////////////////////////////////////////

using System;
using System.Collections.Generic;
using VisitorPattern.Models.Student;
using VisitorPattern.Visitor;

namespace VisitorPattern
{
    /// <summary>
    /// 访问者模式代码示例
    /// </summary>
    public class Program
    {
        public static void Main(string[] args)
        {
            var students = new List<Student>()
            {
                new StudentFree() { Name = "小A",Age = 20},
                new StudentFree() { Name = "小B",Age = 21},
                new StudentVip() { Name = "sunshine",Age = 21}
            };
            {
                Console.WriteLine("**************最笨的方法***********************");
                foreach (var student in students)
                {
                    student.Study();
                    if (student is StudentFree)
                    {
                        Console.WriteLine("获取的视频为版本1 的免费视频");
                    }
                    else if (student is StudentVip)
                    {
                        Console.WriteLine("获取的视频为版本1 的所有视频");
                    }
                }
                Console.WriteLine("**************最笨的方法结束*********************");
            }
            {
                Console.WriteLine("**************访问者模式***********************");
                IVisitor visitor = new GetBank1Video();
                foreach (var student in students)
                {
                    student.Study();
                    student.GetVideos(visitor);
                }
                Console.WriteLine("**************访问者结束***********************");
            }
        }
    }
}
